package com.atguigu.redis;

import redis.clients.jedis.Jedis;

import java.util.Random;
import java.util.Scanner;

public class PhoneCode {
    public static void main(String[] args) {
        //1、请输入手机号
        Scanner input = new Scanner(System.in);
        System.out.println("请输入手机号码");
        String phone = input.next();
        //2、完成发送，并得到返回的验证码并输出 两分钟有效
        System.out.println("输入1完成发送 ");
        input.next();
        String code  =sendPhone(phone);
        if ("-1".equals(code)){
            System.out.println("今天输入验证码已经超过3次，请明天再试");
            return;
        }
        System.out.println("验证码是："+code);
        //3.请输入验证码  点击验证，返回成功或失败
        System.out.println("请输入验证码：");
        String myCode=input.next();
        //4.发送验证码，获取验证码结果并输出
        System.out.println("输入1完成发送");
        input.next();
        boolean flag=verifyCode(myCode,phone);
        if (false){
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
    }

    /**
     * 发送手机号码，返回验证码
     * @param phone
     * @return
     */
    private static String sendPhone(String phone) {
        Jedis jedis = new Jedis("192.168.249.131");
        //1.获取验证码
        String code = getCode();
        //将验证码保存在Redis中，两分钟有效
        String codeKey="code:"+phone;
        jedis.setex(codeKey,120,code);
        //3.每个手机号每天只能输入3次
        String countKey="count:"+phone;
        String count = jedis.get(countKey);
        if (count==null){//如果是第一次，设置次数为一次
            jedis.setex(countKey,24*60*60,"1");
        }else if (Integer.parseInt(count)<=2){//如果是第二次或者第三次，设置次数+1
            jedis.incr(countKey);
        }else {//如果超过3次,给出次数超过的提示
            code="-1"; //code ="今天输入验证码已经超过3次，请明天再试";
        }
        jedis.close();
        //4.返回结果(验证码或者超过3次提示)
        return code;
    }
    //生成6位数字验证码
    public static String getCode() {
        Random random = new Random();
        String code = "";
        for(int i=0;i<6;i++) {
            int rand = random.nextInt(10);
            code += rand;
        }
        return code;
    }

    /**
     * 验证验证码是否正确
     * @param myCode
     * @param phone
     * @return
     */
    private static boolean verifyCode(String myCode, String phone) {
        boolean flag=false; //默认失败
        Jedis jedis = new Jedis("192.168.249.131");
        //获取保存在Redis中的验证码
        String codeKey ="code:"+phone;
        String code = jedis.get(codeKey);
        if (myCode.equals(code)){
            flag=true;
        }
        jedis.close();
        return false;
    }
}
